/******************************************************************************
 * Copyright (C) 2016 Wuhan Water Elephant Co.Ltd All Rights Reserved. 
 * 本软件为武汉水象科技有限公司开发研制。 未经本公司正式书面同意，其他任何个人、
 * 团体不得使用、复制、修改或发布本软件.
 *****************************************************************************/
package com.sxfq.loansupermarket.business.core;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import com.alibaba.fastjson.JSON;
import com.sxfq.loansupermarket.business.dto.login.LoginInfoDto;
import com.sxfq.loansupermarket.common.constants.RedisKeyConstants;
import com.sxfq.loansupermarket.common.utils.RedisUtil;

/**
 * Module:
 * 
 * SsoComponent.java
 * 
 * @author 毛恩奇
 * @since JDK 1.8
 * @version 1.0
 * @description: 单点登录工具类
 */
@Component
public class SsoComponent {
	// 登录保存时间，单位：秒
	@Value("${sso.seconds:1800}")
	private int seconds;

	/**
	 * 保存登录到redis，存入cookie的token作为key，用户信息作为value
	 * 
	 * @param loginToken
	 * @param phone
	 */
	public boolean setLoginInfo(String loginToken, LoginInfoDto loginInfoDto) {
		String result = null;
		if (seconds > 0) {
			result = RedisUtil.setex(RedisKeyConstants.LOGIN_TOKEN_PRE + loginToken, JSON.toJSONString(loginInfoDto),
					seconds);
		} else {
			result = RedisUtil.set(RedisKeyConstants.LOGIN_TOKEN_PRE + loginToken, JSON.toJSONString(loginInfoDto));
		}
		if (StringUtils.isNotEmpty(result)) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * 根据cookie的token获取用户信息
	 * 
	 * @param loginToken
	 * @return
	 */
	public LoginInfoDto getLoginInfo(String loginToken) {
		if (StringUtils.isEmpty(loginToken)) {
			return null;
		}
		LoginInfoDto loginInfoDto = null;
		String loginInfoDtoStr = RedisUtil.get(RedisKeyConstants.LOGIN_TOKEN_PRE + loginToken);
		if (StringUtils.isNotEmpty(loginInfoDtoStr)) {
			if (seconds > 0) {
				// 重置登录失效时间
				RedisUtil.expire(RedisKeyConstants.LOGIN_TOKEN_PRE + loginToken, seconds);
			}
			loginInfoDto = JSON.parseObject(loginInfoDtoStr, LoginInfoDto.class);
		}
		return loginInfoDto;
	}

	/**
	 * 登出，删除redis
	 * 
	 * @param loginToken
	 */
	public void loginOut(String loginToken) {
		if (StringUtils.isNotEmpty(loginToken)) {
			RedisUtil.del(RedisKeyConstants.LOGIN_TOKEN_PRE + loginToken);
		}
	}
}